package com.qf.data.service;

import cn.hutool.core.util.ObjectUtil;
import com.qf.common.constant.CacheConstant;
import com.qf.common.model.DeviceCmd;
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.stereotype.Service;

/**
 * @author 千锋健哥
 */
@Service
public class DeviceCmdServiceImpl implements DeviceCmdService {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void saveCmdLog(DeviceCmd deviceCmd) {
        //判断deviceCmd对象不为空
        if (ObjectUtil.isNull(deviceCmd)) {
            return;
        }
        //创建集合名称
        String collectionName = CacheConstant.Entity.DEVICE +
                CacheConstant.Suffix.CMD + "_" + deviceCmd.getProductKey();
        //创建索引
        cmdIndex(collectionName);
        //保存指令日志对象到mongodb
        mongoTemplate.insert(deviceCmd, collectionName);
    }

    private void cmdIndex(String collectionName) {
        Index deviceIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        deviceIndex.background().on("deviceKey", Sort.Direction.DESC).named("deviceKey_Index_Cmd");
        mongoTemplate.indexOps(collectionName).ensureIndex(deviceIndex);

        Index productKeyIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        productKeyIndex.background().on("productKey", Sort.Direction.DESC).named("productKey_Index_Cmd");
        mongoTemplate.indexOps(collectionName).ensureIndex(productKeyIndex);

        Index tenantIdIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        tenantIdIndex.background().on("tenantId", Sort.Direction.DESC).named("tenantId_Index_Cmd");
        mongoTemplate.indexOps(collectionName).ensureIndex(tenantIdIndex);

        Index createTimeIndex = new Index();
        //on后面第一个参数是对哪个字段创建索引, 第二参数, 排序规则, named中的参数是索引名字
        createTimeIndex.background().on("createTime", Sort.Direction.DESC).named("createTime_Index_Cmd");
        mongoTemplate.indexOps(collectionName).ensureIndex(createTimeIndex);
    }
}
